package com.example.mislugares;

import android.app.ListActivity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.Toast;


public class MainActivity extends ListActivity implements LocationListener{
	
	private static final long DOS_MINUTOS = 2 * 60 * 1000;
	public BaseAdapter adaptador;
	public boolean mute;
	private MediaPlayer mp;
	private LocationManager manejador;
	private Location mejorLocaliz;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		Log.d("HOLA","Entramos en onCreate");
		Toast.makeText(this, "M onCreate", Toast.LENGTH_SHORT).show();
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	    adaptador = new MiAdaptador(this); 
		setListAdapter(adaptador);
		mp  = MediaPlayer.create(this, R.raw.audio);
		
		manejador = (LocationManager) getSystemService(LOCATION_SERVICE);
		if(manejador.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
		       actualizaMejorLocaliz(manejador.getLastKnownLocation(
		                                       LocationManager.GPS_PROVIDER));
		}
		if(manejador.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
		       actualizaMejorLocaliz(manejador.getLastKnownLocation(
		                                       LocationManager.NETWORK_PROVIDER));
		}
	}
	
	@Override
	protected void onStart(){
		super.onStart();
		Toast.makeText(this, "M onStart", Toast.LENGTH_SHORT).show();
	}
	
	@Override
	protected void onResume(){
		super.onResume();
		Toast.makeText(this, "M onResume", Toast.LENGTH_SHORT).show();
		mp.start();
		activarProveedores();
	}
	
	@Override
	protected void onPause(){
		Toast.makeText(this, "M onPause", Toast.LENGTH_SHORT).show();
		super.onPause();
		mp.pause();
		manejador.removeUpdates(this);
	}
	
	@Override
	protected void onStop(){
		super.onStop();
		Toast.makeText(this, "M onStop", Toast.LENGTH_SHORT).show();
	}
		
	@Override
	protected void onDestroy(){
		super.onStop();
		Toast.makeText(this, "M onDestroy", Toast.LENGTH_SHORT).show();
		mp.stop();
	}
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}
	
	public void lanzarPreferencias(View view){
		   Intent i = new Intent(this, Preferencias.class);
		   startActivity(i);
		}
	public void lanzarPreferencias(){
		   Intent i = new Intent(this, Preferencias.class);
		   startActivity(i);
		}
	
	public void lanzarAcercaDe(View view){
	      Intent i = new Intent(this, AcercaDe.class);
	      startActivity(i);
	}
	public void lanzarAcercaDe(){
	      Intent i = new Intent(this, AcercaDe.class);
	      startActivity(i);
	}
	public void salir(View view){
	       finish();
	}

	public boolean onOptionsItemSelected(MenuItem item){
		switch(item.getItemId()) {
        case R.id.accion_config:
        	lanzarPreferencias();
            return true;
        case R.id.accion_add_lugar:
        	Toast.makeText(this, "de momento no hago nada", Toast.LENGTH_SHORT).show();
        	//lanzarVistaLugar();
            return true;
        case R.id.accion_acercaDe:
        	lanzarAcercaDe();
            return true;
        default:
               return super.onOptionsItemSelected(item);
        }	
	}
	
	public void mostrarPreferencias(){
		SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);
		String s = "notificaciones===> "+ pref.getBoolean("notificaciones",true)
		         +"\n, distancia mínima===> " + pref.getString("distancia","?")
		         +"\n, Mute ===>"+pref.getBoolean("sonido", false);
		Toast.makeText(this, s, Toast.LENGTH_LONG).show();
		}
	
	@Override 
	protected void onListItemClick(ListView listView, 
	                         View vista, int posicion, long id) {
	   super.onListItemClick(listView, vista, posicion, id);
	   Intent intent= new Intent(this, VistaLugar.class);
	   intent.putExtra("id", id);
	   startActivityForResult(intent,1234);
	}
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		Log.d("RAUL","Entramos en onActivityResult");
		if (requestCode == 1234) {
        	adaptador = new MiAdaptador(this); 
    		setListAdapter(adaptador);
        }
    }
	public boolean quitarSonido(){
		SharedPreferences pref;
		pref = PreferenceManager.getDefaultSharedPreferences(this);    
		return pref.getBoolean("sonido", false);
	 }
	/*
	public void lanzarVistaLugar(View view){
        final EditText entrada = new EditText(this);
        entrada.setText("0");
        new AlertDialog.Builder(this)
           .setTitle("Selección de lugar")
           .setMessage("indica su id:")
           .setView(entrada)
           .setPositiveButton("Ok", new DialogInterface.OnClickListener() {
               public void onClick(DialogInterface dialog, int whichButton) {
                   long id = Long.parseLong(entrada.getText().toString());
                      Intent i = new Intent(MainActivity.this, VistaLugar.class);
                      i.putExtra("id", id);
                      startActivity(i);            
               }})

           .setNegativeButton("Cancelar", null)
           .show();          
      }
	
	public void lanzarVistaLugar(){
        final EditText entrada = new EditText(this);
        entrada.setText("0");
        new AlertDialog.Builder(this)
           .setTitle("Selección de lugar")
           .setMessage("indica su id:")
           .setView(entrada)
           .setPositiveButton("Ok", new DialogInterface.OnClickListener() {
               public void onClick(DialogInterface dialog, int whichButton) {
                   long id = Long.parseLong(entrada.getText().toString());
                      Intent i = new Intent(MainActivity.this, VistaLugar.class);
                      i.putExtra("id", id);
                      startActivity(i);            
               }})

           .setNegativeButton("Cancelar", null)
           .show();          
      }
	*/

	private void activarProveedores() { 
		Log.d("RAULLLLLLLL", "Dentro de activarProveedores");
	   if(manejador.isProviderEnabled(LocationManager.GPS_PROVIDER)){  
	      manejador.requestLocationUpdates(LocationManager.GPS_PROVIDER,
	                20 * 1000, 5, this);
	       }

	   if(manejador.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
	      manejador.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,
	                10 * 1000, 10, this);
	       }
	}
	
	private void actualizaMejorLocaliz(Location localiz) {
		   Log.d("RAULLLLLLLL", "dentro de actualizaMejorLocaliz1");
	       if (mejorLocaliz == null
	                    || localiz.getAccuracy() < 2*mejorLocaliz.getAccuracy()
	                    || localiz.getTime() - mejorLocaliz.getTime() > DOS_MINUTOS) {
	             mejorLocaliz = localiz; 
	             Lugares.posicionActual.setLatitud(localiz.getLatitude());
	             Log.d("RAULLLLLLLL", "dentro de actualizaMejorLocaliz2");
	             Lugares.posicionActual.setLongitud(localiz.getLongitude());
	             
	       }
	       Log.d("RAULLLLLLLLLL", "SALGO de actualizaMejorLocaliz ");
	}
	@Override 
	public void onLocationChanged(Location location) {
	       Log.d("Lugares.TAG", "Nueva localización: "+location);
	       actualizaMejorLocaliz(location);
	}
	 

	@Override 
	public void onProviderDisabled(String proveedor) {
	       Log.d("Lugares.TAG", "Se deshabilita: "+proveedor);
	       activarProveedores();
	}

	@Override    
	public void onProviderEnabled(String proveedor) {
	       Log.d("Lugares.TAG", "Se habilita: "+proveedor);
	       activarProveedores();
	}

	@Override
	public void onStatusChanged(String proveedor, int estado, Bundle extras) {
	       Log.d("Lugares.TAG", "Cambia estado: "+proveedor);
	       activarProveedores();
	}
	
	 @Override
	  protected void onSaveInstanceState(Bundle estadoGuardado){
	       super.onSaveInstanceState(estadoGuardado);
	       if (mp != null) {
	           int pos = mp.getCurrentPosition();
	           estadoGuardado.putInt("posicion", pos);   
	       }
	   }
	 
	   @Override
	   protected void onRestoreInstanceState(Bundle estadoGuardado){
	        super.onRestoreInstanceState(estadoGuardado);
	        if (estadoGuardado != null && mp != null) {
	            int pos = estadoGuardado.getInt("posicion");
	            mp.seekTo(pos);
	          }
	   }
	
 }

